<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 8.6.9" />
<title></title>
<style type="text/css">
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */

/* Default font. */
body {
  font-family: Georgia,serif;
}

/* Title font. */
h1, h2, h3, h4, h5, h6,
div.title, caption.title,
thead, p.table.header,
#toctitle,
#author, #revnumber, #revdate, #revremark,
#footer {
  font-family: Arial,Helvetica,sans-serif;
}

body {
  margin: 1em 5% 1em 5%;
}

a {
  color: blue;
  text-decoration: underline;
}
a:visited {
  color: fuchsia;
}

em {
  font-style: italic;
  color: navy;
}

strong {
  font-weight: bold;
  color: #083194;
}

h1, h2, h3, h4, h5, h6 {
  color: #527bbd;
  margin-top: 1.2em;
  margin-bottom: 0.5em;
  line-height: 1.3;
}

h1, h2, h3 {
  border-bottom: 2px solid silver;
}
h2 {
  padding-top: 0.5em;
}
h3 {
  float: left;
}
h3 + * {
  clear: left;
}
h5 {
  font-size: 1.0em;
}

div.sectionbody {
  margin-left: 0;
}

hr {
  border: 1px solid silver;
}

p {
  margin-top: 0.5em;
  margin-bottom: 0.5em;
}

ul, ol, li > p {
  margin-top: 0;
}
ul > li     { color: #aaa; }
ul > li > * { color: black; }

.monospaced, code, pre {
  font-family: "Courier New", Courier, monospace;
  font-size: inherit;
  color: navy;
  padding: 0;
  margin: 0;
}
pre {
  white-space: pre-wrap;
}

#author {
  color: #527bbd;
  font-weight: bold;
  font-size: 1.1em;
}
#email {
}
#revnumber, #revdate, #revremark {
}

#footer {
  font-size: small;
  border-top: 2px solid silver;
  padding-top: 0.5em;
  margin-top: 4.0em;
}
#footer-text {
  float: left;
  padding-bottom: 0.5em;
}
#footer-badges {
  float: right;
  padding-bottom: 0.5em;
}

#preamble {
  margin-top: 1.5em;
  margin-bottom: 1.5em;
}
div.imageblock, div.exampleblock, div.verseblock,
div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
div.admonitionblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.admonitionblock {
  margin-top: 2.0em;
  margin-bottom: 2.0em;
  margin-right: 10%;
  color: #606060;
}

div.content { /* Block element content. */
  padding: 0;
}

/* Block element titles. */
div.title, caption.title {
  color: #527bbd;
  font-weight: bold;
  text-align: left;
  margin-top: 1.0em;
  margin-bottom: 0.5em;
}
div.title + * {
  margin-top: 0;
}

td div.title:first-child {
  margin-top: 0.0em;
}
div.content div.title:first-child {
  margin-top: 0.0em;
}
div.content + div.title {
  margin-top: 0.0em;
}

div.sidebarblock > div.content {
  background: #ffffee;
  border: 1px solid #dddddd;
  border-left: 4px solid #f0f0f0;
  padding: 0.5em;
}

div.listingblock > div.content {
  border: 1px solid #dddddd;
  border-left: 5px solid #f0f0f0;
  background: #f8f8f8;
  padding: 0.5em;
}

div.quoteblock, div.verseblock {
  padding-left: 1.0em;
  margin-left: 1.0em;
  margin-right: 10%;
  border-left: 5px solid #f0f0f0;
  color: #888;
}

div.quoteblock > div.attribution {
  padding-top: 0.5em;
  text-align: right;
}

div.verseblock > pre.content {
  font-family: inherit;
  font-size: inherit;
}
div.verseblock > div.attribution {
  padding-top: 0.75em;
  text-align: left;
}
/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
div.verseblock + div.attribution {
  text-align: left;
}

div.admonitionblock .icon {
  vertical-align: top;
  font-size: 1.1em;
  font-weight: bold;
  text-decoration: underline;
  color: #527bbd;
  padding-right: 0.5em;
}
div.admonitionblock td.content {
  padding-left: 0.5em;
  border-left: 3px solid #dddddd;
}

div.exampleblock > div.content {
  border-left: 3px solid #dddddd;
  padding-left: 0.5em;
}

div.imageblock div.content { padding-left: 0; }
span.image img { border-style: none; vertical-align: text-bottom; }
a.image:visited { color: white; }

dl {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
dt {
  margin-top: 0.5em;
  margin-bottom: 0;
  font-style: normal;
  color: navy;
}
dd > *:first-child {
  margin-top: 0.1em;
}

ul, ol {
    list-style-position: outside;
}
ol.arabic {
  list-style-type: decimal;
}
ol.loweralpha {
  list-style-type: lower-alpha;
}
ol.upperalpha {
  list-style-type: upper-alpha;
}
ol.lowerroman {
  list-style-type: lower-roman;
}
ol.upperroman {
  list-style-type: upper-roman;
}

div.compact ul, div.compact ol,
div.compact p, div.compact p,
div.compact div, div.compact div {
  margin-top: 0.1em;
  margin-bottom: 0.1em;
}

tfoot {
  font-weight: bold;
}
td > div.verse {
  white-space: pre;
}

div.hdlist {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
div.hdlist tr {
  padding-bottom: 15px;
}
dt.hdlist1.strong, td.hdlist1.strong {
  font-weight: bold;
}
td.hdlist1 {
  vertical-align: top;
  font-style: normal;
  padding-right: 0.8em;
  color: navy;
}
td.hdlist2 {
  vertical-align: top;
}
div.hdlist.compact tr {
  margin: 0;
  padding-bottom: 0;
}

.comment {
  background: yellow;
}

.footnote, .footnoteref {
  font-size: 0.8em;
}

span.footnote, span.footnoteref {
  vertical-align: super;
}

#footnotes {
  margin: 20px 0 20px 0;
  padding: 7px 0 0 0;
}

#footnotes div.footnote {
  margin: 0 0 5px 0;
}

#footnotes hr {
  border: none;
  border-top: 1px solid silver;
  height: 1px;
  text-align: left;
  margin-left: 0;
  width: 20%;
  min-width: 100px;
}

div.colist td {
  padding-right: 0.5em;
  padding-bottom: 0.3em;
  vertical-align: top;
}
div.colist td img {
  margin-top: 0.3em;
}

@media print {
  #footer-badges { display: none; }
}

#toc {
  margin-bottom: 2.5em;
}

#toctitle {
  color: #527bbd;
  font-size: 1.1em;
  font-weight: bold;
  margin-top: 1.0em;
  margin-bottom: 0.1em;
}

div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
  margin-top: 0;
  margin-bottom: 0;
}
div.toclevel2 {
  margin-left: 2em;
  font-size: 0.9em;
}
div.toclevel3 {
  margin-left: 4em;
  font-size: 0.9em;
}
div.toclevel4 {
  margin-left: 6em;
  font-size: 0.9em;
}

span.aqua { color: aqua; }
span.black { color: black; }
span.blue { color: blue; }
span.fuchsia { color: fuchsia; }
span.gray { color: gray; }
span.green { color: green; }
span.lime { color: lime; }
span.maroon { color: maroon; }
span.navy { color: navy; }
span.olive { color: olive; }
span.purple { color: purple; }
span.red { color: red; }
span.silver { color: silver; }
span.teal { color: teal; }
span.white { color: white; }
span.yellow { color: yellow; }

span.aqua-background { background: aqua; }
span.black-background { background: black; }
span.blue-background { background: blue; }
span.fuchsia-background { background: fuchsia; }
span.gray-background { background: gray; }
span.green-background { background: green; }
span.lime-background { background: lime; }
span.maroon-background { background: maroon; }
span.navy-background { background: navy; }
span.olive-background { background: olive; }
span.purple-background { background: purple; }
span.red-background { background: red; }
span.silver-background { background: silver; }
span.teal-background { background: teal; }
span.white-background { background: white; }
span.yellow-background { background: yellow; }

span.big { font-size: 2em; }
span.small { font-size: 0.6em; }

span.underline { text-decoration: underline; }
span.overline { text-decoration: overline; }
span.line-through { text-decoration: line-through; }

div.unbreakable { page-break-inside: avoid; }


/*
 * xhtml11 specific
 *
 * */

div.tableblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.tableblock > table {
  border: 3px solid #527bbd;
}
thead, p.table.header {
  font-weight: bold;
  color: #527bbd;
}
p.table {
  margin-top: 0;
}
/* Because the table frame attribute is overriden by CSS in most browsers. */
div.tableblock > table[frame="void"] {
  border-style: none;
}
div.tableblock > table[frame="hsides"] {
  border-left-style: none;
  border-right-style: none;
}
div.tableblock > table[frame="vsides"] {
  border-top-style: none;
  border-bottom-style: none;
}


/*
 * html5 specific
 *
 * */

table.tableblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
thead, p.tableblock.header {
  font-weight: bold;
  color: #527bbd;
}
p.tableblock {
  margin-top: 0;
}
table.tableblock {
  border-width: 3px;
  border-spacing: 0px;
  border-style: solid;
  border-color: #527bbd;
  border-collapse: collapse;
}
th.tableblock, td.tableblock {
  border-width: 1px;
  padding: 4px;
  border-style: solid;
  border-color: #527bbd;
}

table.tableblock.frame-topbot {
  border-left-style: hidden;
  border-right-style: hidden;
}
table.tableblock.frame-sides {
  border-top-style: hidden;
  border-bottom-style: hidden;
}
table.tableblock.frame-none {
  border-style: hidden;
}

th.tableblock.halign-left, td.tableblock.halign-left {
  text-align: left;
}
th.tableblock.halign-center, td.tableblock.halign-center {
  text-align: center;
}
th.tableblock.halign-right, td.tableblock.halign-right {
  text-align: right;
}

th.tableblock.valign-top, td.tableblock.valign-top {
  vertical-align: top;
}
th.tableblock.valign-middle, td.tableblock.valign-middle {
  vertical-align: middle;
}
th.tableblock.valign-bottom, td.tableblock.valign-bottom {
  vertical-align: bottom;
}


/*
 * manpage specific
 *
 * */

body.manpage h1 {
  padding-top: 0.5em;
  padding-bottom: 0.5em;
  border-top: 2px solid silver;
  border-bottom: 2px solid silver;
}
body.manpage h2 {
  border-style: none;
}
body.manpage div.sectionbody {
  margin-left: 3em;
}

@media print {
  body.manpage div#toc { display: none; }
}


</style>
<script type="text/javascript">
/*<![CDATA[*/
var asciidoc = {  // Namespace.

/////////////////////////////////////////////////////////////////////
// Table Of Contents generator
/////////////////////////////////////////////////////////////////////

/* Author: Mihai Bazon, September 2002
 * http://students.infoiasi.ro/~mishoo
 *
 * Table Of Content generator
 * Version: 0.4
 *
 * Feel free to use this script under the terms of the GNU General Public
 * License, as long as you do not remove or alter this notice.
 */

 /* modified by Troy D. Hanson, September 2006. License: GPL */
 /* modified by Stuart Rackham, 2006, 2009. License: GPL */

// toclevels = 1..4.
toc: function (toclevels) {

  function getText(el) {
    var text = "";
    for (var i = el.firstChild; i != null; i = i.nextSibling) {
      if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
        text += i.data;
      else if (i.firstChild != null)
        text += getText(i);
    }
    return text;
  }

  function TocEntry(el, text, toclevel) {
    this.element = el;
    this.text = text;
    this.toclevel = toclevel;
  }

  function tocEntries(el, toclevels) {
    var result = new Array;
    var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
    // Function that scans the DOM tree for header elements (the DOM2
    // nodeIterator API would be a better technique but not supported by all
    // browsers).
    var iterate = function (el) {
      for (var i = el.firstChild; i != null; i = i.nextSibling) {
        if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
          var mo = re.exec(i.tagName);
          if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
            result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
          }
          iterate(i);
        }
      }
    }
    iterate(el);
    return result;
  }

  var toc = document.getElementById("toc");
  if (!toc) {
    return;
  }

  // Delete existing TOC entries in case we're reloading the TOC.
  var tocEntriesToRemove = [];
  var i;
  for (i = 0; i < toc.childNodes.length; i++) {
    var entry = toc.childNodes[i];
    if (entry.nodeName.toLowerCase() == 'div'
     && entry.getAttribute("class")
     && entry.getAttribute("class").match(/^toclevel/))
      tocEntriesToRemove.push(entry);
  }
  for (i = 0; i < tocEntriesToRemove.length; i++) {
    toc.removeChild(tocEntriesToRemove[i]);
  }

  // Rebuild TOC entries.
  var entries = tocEntries(document.getElementById("content"), toclevels);
  for (var i = 0; i < entries.length; ++i) {
    var entry = entries[i];
    if (entry.element.id == "")
      entry.element.id = "_toc_" + i;
    var a = document.createElement("a");
    a.href = "#" + entry.element.id;
    a.appendChild(document.createTextNode(entry.text));
    var div = document.createElement("div");
    div.appendChild(a);
    div.className = "toclevel" + entry.toclevel;
    toc.appendChild(div);
  }
  if (entries.length == 0)
    toc.parentNode.removeChild(toc);
},


/////////////////////////////////////////////////////////////////////
// Footnotes generator
/////////////////////////////////////////////////////////////////////

/* Based on footnote generation code from:
 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
 */

footnotes: function () {
  // Delete existing footnote entries in case we're reloading the footnodes.
  var i;
  var noteholder = document.getElementById("footnotes");
  if (!noteholder) {
    return;
  }
  var entriesToRemove = [];
  for (i = 0; i < noteholder.childNodes.length; i++) {
    var entry = noteholder.childNodes[i];
    if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
      entriesToRemove.push(entry);
  }
  for (i = 0; i < entriesToRemove.length; i++) {
    noteholder.removeChild(entriesToRemove[i]);
  }

  // Rebuild footnote entries.
  var cont = document.getElementById("content");
  var spans = cont.getElementsByTagName("span");
  var refs = {};
  var n = 0;
  for (i=0; i<spans.length; i++) {
    if (spans[i].className == "footnote") {
      n++;
      var note = spans[i].getAttribute("data-note");
      if (!note) {
        // Use [\s\S] in place of . so multi-line matches work.
        // Because JavaScript has no s (dotall) regex flag.
        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
        spans[i].innerHTML =
          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
          "' title='View footnote' class='footnote'>" + n + "</a>]";
        spans[i].setAttribute("data-note", note);
      }
      noteholder.innerHTML +=
        "<div class='footnote' id='_footnote_" + n + "'>" +
        "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
        n + "</a>. " + note + "</div>";
      var id =spans[i].getAttribute("id");
      if (id != null) refs["#"+id] = n;
    }
  }
  if (n == 0)
    noteholder.parentNode.removeChild(noteholder);
  else {
    // Process footnoterefs.
    for (i=0; i<spans.length; i++) {
      if (spans[i].className == "footnoteref") {
        var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
        href = href.match(/#.*/)[0];  // Because IE return full URL.
        n = refs[href];
        spans[i].innerHTML =
          "[<a href='#_footnote_" + n +
          "' title='View footnote' class='footnote'>" + n + "</a>]";
      }
    }
  }
},

install: function(toclevels) {
  var timerId;

  function reinstall() {
    asciidoc.footnotes();
    if (toclevels) {
      asciidoc.toc(toclevels);
    }
  }

  function reinstallAndRemoveTimer() {
    clearInterval(timerId);
    reinstall();
  }

  timerId = setInterval(reinstall, 500);
  if (document.addEventListener)
    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
  else
    window.onload = reinstallAndRemoveTimer;
}

}
asciidoc.install();
/*]]>*/
</script>
</head>
<body class="article">
<div id="header">
</div>
<div id="content">
<div class="sect1">
<h2 id="neo4j-etl-cli">neo4j-etl Command Line Tool</h2>
<div class="sectionbody">
<div class="paragraph"><p>This is the command line tool you use to retrieve and map the metadata from your relational database and drive the export from the relational and import into Neo4j database.</p></div>
<div class="paragraph"><p>Also, with the newly released user interface you can preview the resulting graph data model and eventually improve it by setting your favourite label and property names
or relationships and property types.</p></div>
<div class="paragraph"><p>It supports all relational databases with a JDBC driver, for example <strong>MySQL</strong>, <strong>PostgreSQL</strong>, <strong>Oracle</strong> and <strong>Microsoft SQL</strong>.</p></div>
<div class="paragraph"><p>You can get the <a href="http://github.com/neo4j-contrib/neo4j-etl/releases/latest">latest version of the import tool from GitHub</a>.</p></div>
<div class="paragraph"><p>Once downloaded and uncompressed the operating system specific <code>zip</code> / <code>tar.gz</code>, you also need download the proper JDBC Driver and add it to the <code>lib</code> folder.</p></div>
<div class="paragraph"><p>You can follow the proper link in the below table in order to download the proper driver jar</p></div>
<div class="tableblock">
<table rules="all"
width="100%"
frame="border"
cellspacing="0" cellpadding="4">
<col width="50%" />
<col width="50%" />
<tbody>
<tr>
<td align="left" valign="top"><p class="table">Vendor</p></td>
<td align="left" valign="top"><p class="table">JDBC Driver URL</p></td>
</tr>
<tr>
<td align="left" valign="top"><p class="table"><a href="https://www.mysql.com/">MySql</a></p></td>
<td align="left" valign="top"><p class="table"><a href="http://dev.mysql.com/downloads/connector/j/">http://dev.mysql.com/downloads/connector/j/</a></p></td>
</tr>
<tr>
<td align="left" valign="top"><p class="table"><a href="http://www.postgresql.com/">PostgreSql</a></p></td>
<td align="left" valign="top"><p class="table"><a href="https://jdbc.postgresql.org/download.html">https://jdbc.postgresql.org/download.html</a></p></td>
</tr>
<tr>
<td align="left" valign="top"><p class="table"><a href="https://www.oracle.com/">Oracle</a></p></td>
<td align="left" valign="top"><p class="table"><a href="http://www.oracle.com/technetwork/database/features/jdbc/default-2280470.html">http://www.oracle.com/technetwork/database/features/jdbc/default-2280470.html</a></p></td>
</tr>
<tr>
<td align="left" valign="top"><p class="table"><a href="https://www.microsoft.com/en-us/sql-server/">Microsoft SQL Server</a></p></td>
<td align="left" valign="top"><p class="table"><a href="https://www.microsoft.com/en-us/download/details.aspx?id=55539">https://www.microsoft.com/en-us/download/details.aspx?id=55539</a></p></td>
</tr>
</tbody>
</table>
</div>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">For very large databases make sure to have enough disk-space for the CSV export and the Neo4j datastore and enough RAM and CPUs to finish the import quickly.</td>
</tr></table>
</div>
<div class="sect2">
<h3 id="_available_commands">Available commands</h3>
<div class="listingblock">
<div class="content">
<pre><code>NAME

        neo4j-etl

            - Export tools for MySQL, PostgreSQL, Oracle and Microsoft SQL RDBMS.

SYNOPSIS

        neo4j-etl { ui | export | generate-metadata-mapping | help* }

            [--] [cmd-options] &lt;cmd-args&gt;

        Where command-specific options [cmd-options] are:

            export:

                --rdbms:url &lt;rdbms url&gt;
                --rdbms:user &lt;rdbms user&gt;
                --rdbms:password &lt;rdbms password&gt;
                [ --rdbms:schema &lt;rdbms schema&gt; ]

                [ --using &lt;bulk:neo4j-import* | cypher:neo4j-shell | cypher:shell | cypher:direct&gt; ]

                [ --neo4j:url &lt;neo4j url&gt; ]
                [ --neo4j:user &lt;neo4j user&gt; ]
                [ --neo4j:password &lt;neo4j password&gt; ]

                --import-tool &lt;directory&gt;
                --csv-directory &lt;directory&gt;
                --destination &lt;directory&gt;

                [ --mapping-file &lt;file | stdin&gt; ]

                [ { --exclusion-mode | --exc } &lt;none* | exclude | include&gt; ]
                [ { --relationship-name | --rel-name } &lt;table* | column&gt; ]
                [ { --tiny-int | --tiny } &lt;byte* | boolean&gt; ]
                [ --delimiter &lt;character&gt; ]
                [ --options-file &lt;file&gt; ]
                [ --quote &lt;character&gt; ]
                [ --force ]
                [ --debug ]

            generate-metadata-mapping:

                --rdbms:url &lt;rdbms url&gt;
                --rdbms:user &lt;rdbms user&gt;
                --rdbms:password &lt;rdbms password&gt;
                [ { --rdbms:schema } &lt;schema&gt; ]

                [ { --exclusion-mode | --exc } &lt;none* | exclude | include&gt; ]
                [ { --relationship-name | --rel-name } &lt;table* | column&gt; ]
                [ { --tiny-int | --tiny } &lt;byte* | boolean&gt; ]
                [ --delimiter &lt;character&gt; ]
                [ --options-file &lt;file&gt; ]
                [ --quote &lt;quote&gt; ]
                [ --debug ]

            help:

        Where command-specific arguments &lt;cmd-args&gt; are:

            ui: { start | stop }
            export: [ &lt;table1 table2 ...&gt;... ]
            generate-metadata-mapping: [ &lt;table1 table2 ...&gt;... ]
            help: [ &lt;command&gt;... ]

        Where * indicates the default command(s)
        See 'neo4j-etl help &lt;command&gt;' for more information on a specific command.

        Note:

            Previous releases' parameters are still maintained for retro-compatibility,
            but they've been marked as deprecated and may be removed in future versions.

            export:
            generate-metadata-mapping:

                    the triple { -h | --host } &lt;host&gt; { -p | --port } &lt;port&gt; { -d | --database } &lt;database&gt;
                    has been deprecated in favour of --rdbms:url &lt;rdbms url&gt;

                    { -s | --schema } &lt;schema&gt; has been deprecated in favour of --rdbms:schema &lt;schema&gt;</code></pre>
</div></div>
</div>
<div class="sect2">
<h3 id="_em_help_em_command"><em>help</em> command</h3>
<div class="listingblock">
<div class="content">
<pre><code>NAME
        neo4j-etl help

            - Display help information

SYNOPSIS
        neo4j-etl help [--] [ &lt;command&gt;... ]

OPTIONS
        --
            This option can be used to separate command-line options from the
            list of arguments (useful when arguments might be mistaken for
            command-line options)

        &lt;command&gt;</code></pre>
</div></div>
</div>
<div class="sect2">
<h3 id="_em_generate_metadata_mapping_em_command"><em>generate-metadata-mapping</em> command</h3>
<div class="listingblock">
<div class="content">
<pre><code>NAME

        neo4j-etl generate-metadata-mapping

            - Create RDBMS to Neo4j metadata mapping Json.

SYNOPSIS
        neo4j-etl generate-metadata-mapping

            --rdbms:url &lt;rdbms url&gt;
            --rdbms:user &lt;rdbms user&gt;
            --rdbms:password &lt;rdbms password&gt;
            [ --rdbms:schema &lt;rdbms schema&gt; ]

            [ { --exclusion-mode | --exc } &lt;none* | exclude | include&gt; ]
            [ { --relationship-name | --rel-name } &lt;table* | column&gt; ]
            [ { --tiny-int | --tiny } &lt;byte* | boolean&gt; ]
            [ --delimiter &lt;character&gt; ]
            [ --options-file &lt;file&gt; ]
            [ --quote &lt;quote&gt; ]
            [ --debug ]

            [--] [ &lt;table1 table2 ...&gt;... ]

OPTIONS

        --rdbms:url &lt;name&gt;
            RDBMS connection URL.

        --rdbms:user &lt;username&gt;
            RDBMS login user.

        --rdbms:password &lt;password&gt;
            RDBMS login password.

        --rdbms:schema &lt;schema&gt;
            RDBMS schema to be exported.

        --debug
            Print detailed diagnostic output.

        --delimiter &lt;delimiter&gt;
            Delimiter to separate fields in CSV.

        --exclusion-mode &lt;exclude|include|none(default)&gt;, --exc &lt;exclude|include|none(default)&gt;
            Specifies how to handle table exclusion. Options are mutually
            exclusive.exclude: Excludes specified tables from the process. All
            other tables will be included.include: Includes specified tables
            only. All other tables will be excluded.none: All tables are
            included in the process.

        --options-file &lt;file&gt;
            Path to file containing Neo4j import tool options.

        --quote &lt;quote&gt;
            Character to treat as quotation character for values in CSV data.

        --relationship-name &lt;table(default)|column&gt;, --rel-name
        &lt;table(default)|column&gt;
            Specifies whether to get the name for relationships from table names
            or column names.

        --tiny-int &lt;byte(default)|boolean&gt;
            Specifies whether to convert TinyInt to byte or boolean

        --
            This option can be used to separate command-line options from the
            list of arguments (useful when arguments might be mistaken for
            command-line options)

        &lt;table1 table2 ...&gt;
            Tables to be excluded/included

DEPRECATED OPTIONS

        -h &lt;hostname&gt;, --host &lt;hostname&gt;
            RDBMS connection host.

        -p &lt;port #&gt;, --port &lt;port #&gt;
            RDBMS connection port.

        -d &lt;name&gt;, --database &lt;name&gt;
            RDBMS database name.

        --u &lt;username&gt;, --user &lt;username&gt;
            RDBMS login user.

        --password &lt;password&gt;
            RDBMS login password.

        -s &lt;schema&gt;, --schema &lt;schema&gt;
            RDBMS schema to be exported.</code></pre>
</div></div>
</div>
<div class="sect2">
<h3 id="_em_ui_em_command"><em>ui</em> command</h3>
<div class="listingblock">
<div class="content">
<pre><code>NAME

        neo4j-etl generate-metadata-mapping

            - Web application for editing RDBMS to Neo4j metadata mapping Json.

SYNOPSIS
        neo4j-etl ui { start | stop }

            --port &lt;port&gt;

OPTIONS

        start:
            Run the `neo4j-etl-ui` web server locally to make the UI available at http://localhost:3000.

        stop:
            Shutdown the `neo4j-etl-ui` web server.

        --port &lt;port&gt;
            Port number to use for connection to the UI.</code></pre>
</div></div>
</div>
<div class="sect2">
<h3 id="_em_export_em_command"><em>export</em> command</h3>
<div class="listingblock">
<div class="content">
<pre><code>NAME

        neo4j-etl export

            - Export from MySQL, PostgreSQL, Oracle and Microsoft SQL RDBMS.

SYNOPSIS

        neo4j-etl export

            --rdbms:url &lt;rdbms url&gt;
            --rdbms:user &lt;rdbms user&gt;
            --rdbms:password &lt;rdbms password&gt;
            [ --rdbms:schema &lt;rdbms schema&gt; ]

            [ --using &lt;bulk:neo4j-import* | cypher:neo4j-shell | cypher:shell | cypher:direct&gt; ]

            [ --neo4j:url &lt;neo4j url&gt; ]
            [ --neo4j:user &lt;neo4j user&gt; ]
            [ --neo4j:password &lt;neo4j password&gt; ]

            --import-tool &lt;directory&gt;
            --csv-directory &lt;directory&gt;
            --destination &lt;directory&gt;

            [ --mapping-file &lt;file | stdin&gt; ]

            [ { --exclusion-mode | --exc } &lt;none* | exclude | include&gt; ]
            [ { --relationship-name | --rel-name } &lt;table* | column&gt; ]
            [ { --tiny-int | --tiny } &lt;byte* | boolean&gt; ]
            [ --delimiter &lt;character&gt; ]
            [ --options-file &lt;file&gt; ]
            [ --quote &lt;character&gt; ]
            [ --force ]
            [ --debug ]

OPTIONS

        --rdbms:url &lt;name&gt;
            RDBMS connection URL.

        --rdbms:user &lt;username&gt;
            RDBMS login user.

        --rdbms:password &lt;password&gt;
            RDBMS login password.

        --rdbms:schema &lt;schema&gt;
            RDBMS schema to be exported.

        --using
            Import strategy
            1) 'bulk:neo4j-import' (default): use "neo4j-import" tool for initial *offline* bulk load;
            2) 'cypher:neo4j-shell': use "neo4j-shell" tool for incremental *offline* bulk load;
            3) 'cypher:shell': use "cypher-shell" tool for incremental *online* single-transaction load;
            4) 'cypher:direct': use the "java bolt driver" for incremental *online* batch load.

            --neo4j:url &lt;name&gt;, --neo4j:user &lt;username&gt;, --neo4j:password &lt;password&gt; are mandatory parameters
            in case of strategies 3) and 4) and the NEO4J database must be online.

        --neo4j:url &lt;name&gt;
            NEO4J connection URL.

        --neo4j:user &lt;username&gt;
            NEO4J login user.

        --neo4j:password &lt;password&gt;
            NEO4J login password.

        --debug
            Print detailed diagnostic output.

        --csv-directory &lt;directory&gt;
            Path to directory for intermediate CSV files.

        --delimiter &lt;character&gt;
            Delimiter to separate fields in CSV.

        --destination &lt;directory&gt;
            Path to destination store directory.

        --exclusion-mode &lt;exclude|include|none(default)&gt;, --exc &lt;exclude|include|none(default)&gt;
            Specifies how to handle table exclusion. Options are mutually
            exclusive.exclude: Excludes specified tables from the process. All
            other tables will be included.include: Includes specified tables
            only. All other tables will be excluded.none: All tables are
            included in the process.

        --force
            Force delete destination store directory if it already exists.

        --import-tool &lt;directory&gt;
            Path to directory containing Neo4j import tool.

        --mapping-file &lt;file|stdin&gt;
            Path to an existing metadata mapping file. The name 'stdin' will
            cause the CSV resources definitions to be read from standard input.

        --options-file &lt;file&gt;
            Path to file containing Neo4j import tool options.

        --quote &lt;character&gt;
            Character to treat as quotation character for values in CSV data.

        --relationship-name &lt;table(default)|column&gt;, --rel-name
        &lt;table(default)|column&gt;
            Specifies whether to get the name for relationships from table names
            or column names

        --tiny-int &lt;byte(default)|boolean&gt;, --tiny &lt;byte(default)|boolean&gt;
            Specifies whether to get the convert TinyInt to byte or boolean

        --
            This option can be used to separate command-line options from the
            list of arguments (useful when arguments might be mistaken for
            command-line options)

        &lt;table1 table2 ...&gt;
            Tables to be excluded/included

DEPRECATED OPTIONS

        -h &lt;hostname&gt;, --host &lt;hostname&gt;
            RDBMS connection host.

        -p &lt;port #&gt;, --port &lt;port #&gt;
            RDBMS connection port.

        -d &lt;name&gt;, --database &lt;name&gt;
            RDBMS database name.

        --u &lt;username&gt;, --user &lt;username&gt;
            RDBMS login user.

        --password &lt;password&gt;
            RDBMS login password.

        -s &lt;schema&gt;, --schema &lt;schema&gt;
            RDBMS schema to be exported.</code></pre>
</div></div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_example_session_basic">Example Session: Basic</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_generate_metadata_mapping">Generate Metadata Mapping</h3>
<div class="listingblock">
<div class="content">
<pre><code>~: export NEO4J_HOME=/path/to/neo4j-enterprise-3.2.3

~: mkdir -p /tmp/northwind

~: $NEO4J_HOME/bin/neo4j-etl generate-metadata-mapping \
  --rdbms:url jdbc:oracle:thin:@localhost:49161:XE \
  --rdbms:user northwind --rdbms:password northwind \
  --rdbms:schema northwind &gt; /tmp/northwind/mapping.json</code></pre>
</div></div>
</div>
<div class="sect2">
<h3 id="_edit_metadata_mapping_via_user_interface">Edit Metadata Mapping via User Interface</h3>
<div class="listingblock">
<div class="content">
<pre><code>STEP 1: Generate Metadata Mapping File (via command line)

Just follow the above instructions.

STEP 2: Inspect and adjust the graph data model (via user interface)

~: $NEO4J_HOME/bin/neo4j-etl ui start

~: open http://localhost:3000

Once satisfied, save the consolidated mapping file (i.e. /tmp/northwind/edited-mapping.json) and stop the ui

~: $NEO4J_HOME/bin/neo4j-etl ui stop

STEP 3: Import your data into Neo4j using the just exported Metadata Mapping (again via command line)

You can use any of the below alternatives, but don't forget to add the following command option:

  --mapping-file /tmp/northwind/edited-mapping.json</code></pre>
</div></div>
</div>
<div class="sect2">
<h3 id="_offline_bulk_import_via_code_neo4j_import_code_tool_for_initial_load_neo4j_must_be_empty">Offline Bulk Import via <code>neo4j-import</code> tool for initial load (neo4j must be empty)</h3>
<div class="listingblock">
<div class="content">
<pre><code>~: echo '{ "multiline-fields" : "true" }' &gt; /tmp/northwind/options.json

~: $NEO4J_HOME/bin/neo4j-etl export  \
  --rdbms:url jdbc:oracle:thin:@localhost:49161:XE \
  --rdbms:user northwind --rdbms :password northwind \
  --rdbms:schema northwind \
  --using bulk:neo4j-import \
  --import-tool $NEO4J_HOME/bin  \
  --csv-directory /tmp/northwind \
  --options-file /tmp/northwind/options.json \
  --quote '"' --force</code></pre>
</div></div>
<div class="ulist"><ul>
<li>
<p>
Test Offline Bulk Import result
</p>
</li>
</ul></div>
<div class="listingblock">
<div class="content">
<pre><code>~: $NEO4J_HOME/bin/neo4j-shell -path $NEO4J_HOME/data/databases/graph.db/ -c 'MATCH (n) RETURN labels(n), count(*);'

# +--------------------------+
# | labels(n)     | count(*) |
# +--------------------------+
# | ["Shipper"]   | 3        |
# | ["Employee"]  | 9        |
# | ["Region"]    | 4        |
# | ["Customer"]  | 93       |
# | ["Territory"] | 53       |
# | ["Product"]   | 77       |
# | ["Supplier"]  | 29       |
# | ["Order"]     | 830      |
# | ["Category"]  | 8        |
# +--------------------------+
# 9 rows</code></pre>
</div></div>
</div>
<div class="sect2">
<h3 id="_online_batch_import_via_code_java_bolt_driver_code_for_incremental_load_neo4j_can_be_already_populated">Online Batch Import via <code>java-bolt-driver</code> for incremental load (neo4j can be already populated)</h3>
<div class="listingblock">
<div class="content">
<pre><code>~: echo '{ "multiline-fields" : "true" }' &gt; /tmp/northwind/options.json

~: $NEO4J_HOME/bin/neo4j-etl export  \
  --rdbms:url jdbc:oracle:thin:@localhost:49161:XE \
  --rdbms:user northwind --rdbms:password northwind \
  --rdbms:schema northwind \
  --using cypher:direct \
  --neo4j:url bolt://localhost:7687 \
  --neo4j:user neo4j --neo4j:password neo4j \
  --import-tool $NEO4J_HOME/bin  \
  --csv-directory /tmp/northwind \
  --options-file /tmp/northwind/options.json \
  --quote '"' --force</code></pre>
</div></div>
<div class="ulist"><ul>
<li>
<p>
Test Online Batch Incremental Import result
</p>
</li>
</ul></div>
<div class="listingblock">
<div class="content">
<pre><code>~: $NEO4J_HOME/bin/cypher-shell -a bolt://localhost:7687 -u neo4j -p neo4j 'MATCH (n) RETURN labels(n), count(*);'

# +--------------------------+
# | labels(n)     | count(*) |
# +--------------------------+
# | ["Shipper"]   | 3        |
# | ["Employee"]  | 9        |
# | ["Region"]    | 4        |
# | ["Customer"]  | 93       |
# | ["Territory"] | 53       |
# | ["Product"]   | 77       |
# | ["Supplier"]  | 29       |
# | ["Order"]     | 830      |
# | ["Category"]  | 8        |
# +--------------------------+
# 9 rows</code></pre>
</div></div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_example_session_docker_northwind">Example Session: Docker + Northwind</h2>
<div class="sectionbody">
<div class="paragraph"><p>This example session is based on the Northwind example dataset.</p></div>
<div class="paragraph"><p>DDL scripts are available here:</p></div>
<div class="ulist"><ul>
<li>
<p>
<a href="https://raw.githubusercontent.com/neo4j-contrib/neo4j-etl/master/neo4j-etl-it/src/main/resources/scripts/mysql/northwind.sql">MySQL</a>
</p>
</li>
<li>
<p>
<a href="https://raw.githubusercontent.com/neo4j-contrib/neo4j-etl/master/neo4j-etl-it/src/main/resources/scripts/postgresql/northwind.sql">PostgreSQL</a>
</p>
</li>
<li>
<p>
<a href="https://raw.githubusercontent.com/neo4j-contrib/neo4j-etl/master/neo4j-etl-it/src/main/resources/scripts/oracle/northwind.sql">Oracle</a>
</p>
</li>
<li>
<p>
<a href="https://raw.githubusercontent.com/neo4j-contrib/neo4j-etl/master/neo4j-etl-it/src/main/resources/scripts/mssql/northwind.sql">Microsoft SQL</a>
</p>
</li>
</ul></div>
<div class="paragraph"><div class="title">MySQL</div><p>Download, start and configure the docker container with MySQL:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>~: docker pull mysql

~: docker run --name neo4j-etl-mysql -e MYSQL_ROOT_PASSWORD=admin -e MYSQL_DATABASE=northwind -e MYSQL_USER=neo4j -e MYSQL_PASSWORD=neo4j -d -p 3306:3306 mysql:latest

~: docker exec -it neo4j-etl-mysql bash
root@eb6f279fdb88:/# mysql -u root -p
Enter password: admin
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.18 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql&gt; grant all privileges on *.* to 'neo4j'@'%' with grant option;
Query OK, 0 rows affected (0.00 sec)

mysql&gt; quit;
Bye
root@bf99fbc0d31c:/# exit
exit

Load the database via the following sql script:
https://raw.githubusercontent.com/neo4j-contrib/neo4j-etl/master/neo4j-etl-it/src/main/resources/scripts/mysql/northwind.sql

~: export NEO4J_HOME=/path/to/neo4j-enterprise-3.2.3

~: mkdir -p /tmp/northwind

~: echo '{ "multiline-fields" : "true" }' &gt; /tmp/northwind/options.json

~: ./bin/neo4j-etl export \
  --rdbms:url jdbc:mysql://localhost:5433/northwind?autoReconnect=true&amp;useSSL=false \
  --rdbms:user neo4j --rdbms:password neo4j \
  --import-tool $NEO4J_HOME/bin \
  --options-file /tmp/northwind/options.json \
  --csv-directory /tmp/northwind \
  --destination $NEO4J_HOME/data/databases/graph.db/ \
  --quote '"' --force</code></pre>
</div></div>
<div class="paragraph"><div class="title">PostgreSQL</div><p>Download, start and configure the docker container with PostgreSQL 9.6.2:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>~: docker pull postgres

~: docker run --name neo4j-etl-postgres -e POSTGRES_USER=neo4j -e POSTGRES_PASSWORD=neo4j -d -p 5433:5432 postgres

~: docker run -it --rm --link neo4j-etl-postgres:postgres postgres psql -h postgres -U neo4j
Password for user neo4j:
psql (9.6.2)
Type "help" for help.

neo4j=# DROP DATABASE IF EXISTS northwind;
neo4j=# CREATE DATABASE northwind WITH OWNER 'neo4j' ENCODING 'UTF8' LC_COLLATE = 'en_US.utf8' LC_CTYPE = 'en_US.utf8';
neo4j=# \q</code></pre>
</div></div>
<div class="paragraph"><p>Load the database via the following sql script:
<a href="https://raw.githubusercontent.com/neo4j-contrib/neo4j-etl/master/neo4j-etl-it/src/main/resources/scripts/postgresql/northwind.sql">northwind.sql</a></p></div>
<div class="listingblock">
<div class="content">
<pre><code>~: export NEO4J_HOME=/path/to/neo4j-enterprise-3.2.3

~: mkdir -p /tmp/northwind

~: echo '{"multiline-fields":"true"}' &gt; /tmp/northwind/options.json

~: ./bin/neo4j-etl export \
  --rdbms:url jdbc:postgresql://localhost:5433/northwind?ssl=false \
  --rdbms:user neo4j --rdbms:password neo4j \
  --import-tool $NEO4J_HOME/bin \
  --options-file /tmp/northwind/options.json \
  --csv-directory /tmp/northwind \
  --destination $NEO4J_HOME/data/databases/graph.db/ \
  --quote '"' --force</code></pre>
</div></div>
<div class="paragraph"><div class="title">Oracle</div><p>Download, start and configure the docker container with Oracle XE 11g:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>~: docker pull wnameless/oracle-xe-11g

~: docker run --name neo4j-etl-oracle -d -p 49160:22 -p 49161:1521 wnameless/oracle-xe-11g

~: ssh root@localhost -p 49160
root@localhost's password: admin

Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.9.13-moby x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
Last login: Mon May  1 17:32:48 2017 from 172.17.0.1

root@692c446a274b:~# wget https://raw.githubusercontent.com/neo4j-contrib/neo4j-etl/master/neo4j-etl-it/src/main/resources/scripts/oracle/northwind.sql

root@692c446a274b:~# sqlplus system/oracle

SQL&gt; CREATE USER northwind IDENTIFIED BY northwind;
SQL&gt; GRANT DBA TO northwind;
SQL&gt; CONN northwind/northwind;
SQL&gt; SET sqlblanklines ON;
SQL&gt; @northwind.sql
SQL&gt; quit;

root@692c446a274b:~# exit

~: export NEO4J_HOME=/path/to/neo4j-enterprise-3.2.3

~: mkdir -p /tmp/northwind

~: echo '{"multiline-fields":"true"}' &gt; /tmp/northwind/options.json

~: ./bin/neo4j-etl export \
  --rdbms:url jdbc:oracle:thin:@localhost:49161:XE \
  --rdbms:user northwind --rdbms:password northwind \
  --rdbms:schema northwind \
  --import-tool $NEO4J_HOME/bin \
  --options-file /tmp/northwind/options.json \
  --csv-directory /tmp/northwind \
  --destination $NEO4J_HOME/data/databases/graph.db/ \
  --quote '"' --force</code></pre>
</div></div>
<div class="paragraph"><div class="title">Microsoft SQL</div><p>Download, start and configure the docker container with Microsoft SQL Server:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>~: docker run --name neo4j-etl-mssql -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Passw0rd!' -p 1433:1433 -d microsoft/mssql-server-linux</code></pre>
</div></div>
<div class="paragraph"><p>If you want to connect to Microsoft SQL client console than you can run the following command:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>~: docker exec -it northwind-mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'Passw0rd!' -d &lt;DATABASE&gt;</code></pre>
</div></div>
</div>
</div>
</div>
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated 2017-08-23 14:35:01 CEST
</div>
</div>
</body>
</html>
